package com.proyecto.controller;

import java.beans.PropertyEditorSupport;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Validator;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;
import com.proyecto.modelo.Provincia;
import com.proyecto.modelo.Rol;


/**
 * @author varjuanp
 *
 */
	@Controller
	@SessionAttributes("login_user")
	@RequestMapping("/provincia/*")
	public class ProvinciaController{

//		@Autowired
//		private ProvinciaSrv provinciaSrv;
		
		@Autowired(required=false)
		Validator validator;
		
//		@Autowired
//		private PaisSrv paisSrv;



		@RequestMapping("/listaProvincias.do")
		public ModelAndView listaUsuarios(HttpServletRequest request,
				HttpServletResponse response, @ModelAttribute("provincia") Provincia provincia) {
			ModelAndView modelAndView = new ModelAndView(
					"/provincia/provinciaForm");
//			modelAndView.addObject("usuarios", usuarioSrv.obtenerUsuarios());
//			modelAndView.addObject("user", usuario);
//			modelAndView.addObject("paises", paisSrv.obtenerPaises());
//			modelAndView.addObject("rolesUsuario", Rol.getRoles());
//			modelAndView.addObject("userList", usuarioSrv.obtenerUsuarios());
			return modelAndView;
		}


		@RequestMapping("/guardarProvincia.do")
		public ModelAndView guardarUsuario(HttpServletRequest request,
				HttpServletResponse response,
				@ModelAttribute("provincia") Provincia provincia, BindingResult errors) {

			ModelAndView mv = new ModelAndView("/provincia/provinciaForm");

			validarDatosIngresados(provincia, errors);
			if (!errors.hasErrors()){
//				provinciaSrv.guardar(provincia);
			}		
//			mv.addObject("paises", paisSrv.obtenerPaises());
//			mv.addObject("rolesUsuario", Rol.getRoles());
//			mv.addObject("userList", usuarioSrv.obtenerUsuarios());
			return mv;
		}


//
		@InitBinder
		protected void initBinder(HttpServletRequest request,
				ServletRequestDataBinder binder) throws Exception {
		    
			//roles
		    binder.registerCustomEditor(Rol.class, new PropertyEditorSupport() {
		        @Override
		        public void setAsText(String text) {
		        	if(!StringUtils.isBlank(text)){
			      	    int id = Integer.parseInt(text);
			            Rol valor = Rol.getRol(id);
			       	    setValue(valor);
			   	    }else{
			       	    setValue("");
			      	    }
		          }
		    });
		    
		    
////			if (binder.getTarget()!=null && !binder.getTarget().equals("")) {
////				binder.setDisallowedFields(new String[] { "pais" });
////				if ((binder.getTarget() instanceof Provincia)) {
////					Provincia provincia = (Provincia) binder.getTarget();
////		
////					Long ciudadId = null;
////					try {
////						ciudadId = ( request.getParameter("ciudad") != null ? Long.parseLong(request
////								.getParameter("ciudad")) : null);
////					} catch (Exception e) {
////					}
////					if (ciudadId != null) {
////						Ciudad ciudad = ciudadSrv
////								.obtenerCiudad(ciudadId);
////						provincia.setPais(ciudad);
////					}
////					
////				}
//			}
		}
	

		
		/**
		 * Valida los datos ingresados en el alta o edicion
		 * de una provincia
		 * @param provinciaDto
		 * @param errors
		 */
		private void validarDatosIngresados(Provincia provincia, BindingResult errors) {
			validator.validate(provincia, errors);
		}

		
		@RequestMapping("/menu.do")
		public ModelAndView showLoginForm() {
			return new ModelAndView("menu");
		}

	}
